﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.Windows.Forms;

namespace MAntLibrary
{
    /// <summary>
    /// Trida Kategorie reprezentuje kategorie danneho e-shopu
    /// </summary>
    public class Kategorie
    {
        #region VARIABLES
        private static List<Kategorie> seznamKategorii = new List<Kategorie>();

        private string id;
        public string Id
        {
            get { return id; }
            set { id = value.Trim(); }
        }

        private string jmenoKategorie;
        public string JmenoKategorie
        {
            get { return jmenoKategorie; }
            set { jmenoKategorie = value.Trim(); }
        }

        private int poradiKategorie;
        public int PoradiKategorie
        {
            get { return poradiKategorie; }
            set
            {
                if (seznamKategorii.Count == 0) { poradiKategorie = 1; }
                else { poradiKategorie = seznamKategorii.Count + 1; }
            }
        }
        #endregion

        #region CONSTRUCTORS
        /// <summary>
        /// konstruktor 1
        /// </summary>
        /// <param name="id">ID polozky</param>
        /// <param name="jmeno">Jmeno polozky</param>
        /// <param name="poradi">Poradi polozky</param>
        public Kategorie(string id, string jmeno, int poradi)
        {
            Id = id.Trim();
            JmenoKategorie = jmeno.Trim();
            PoradiKategorie = poradi;
        }

        /// <summary>
        /// konstruktor 2
        /// </summary>
        /// <param name="id">ID poozky</param>
        /// <param name="jmeno">Jmeno polozky</param>
        public Kategorie(string id, string jmeno)
            : this(id, jmeno, 0)
        {
        }

        /// <summary>
        /// konstruktor 3
        /// </summary>
        public Kategorie() { }

        public Kategorie(string[] p)
        {
            foreach (Kategorie k in seznamKategorii)
            {
                if(k.JmenoKategorie.Equals(p[p.Length-1].Trim()))
                {
                    this.Id = k.Id;
                    this.JmenoKategorie = k.JmenoKategorie;
                    this.PoradiKategorie = k.PoradiKategorie;
                    return;
                }
            }

            this.Id = "";
            this.JmenoKategorie = "";
            this.PoradiKategorie = 0;
        }
        #endregion

        #region SET METHODS
        public static void setKategorie(Kategorie k)
        {
            seznamKategorii.Add(k);
        }

        public static void setKategorie(string id, string jmenoKat, int poradi)
        {
            seznamKategorii.Add(new Kategorie(id, jmenoKat, poradi));
        }

        public static void setKategorie(string id, string jmeno)
        {
            setKategorie(id, jmeno, 0);
        }

        public static void setKategorie(string s)
        {
                seznamKategorii.Clear();
            string[] temp = s.Split(';');

            for (int i = 0; i < temp.Length; i++)
            {
                string[] temp2 = temp[i].Split('>');

                if (!string.IsNullOrEmpty(temp2[0]))
                {
                    seznamKategorii.Add(new Kategorie(temp2[0], temp2[1], Convert.ToInt32(temp2[2])));
                }
            }
        }

        public static void setKategorie(List<Kategorie> temp)
        {
            seznamKategorii = temp;
        }

        public static void setKategorie(Array temp)
        {
            seznamKategorii.Clear();
            foreach (var item in temp)
            {
                string[] s = item.ToString().Split(':');
                setKategorie(s[0], s[1]);
            }
        }

        public static void setKategorie(List<string> listbox)
        {
            seznamKategorii.Clear();
            foreach (var item in listbox)
            {
                string[] s = item.ToString().Split(':');
                setKategorie(s[0], s[1]);
            }
        }
        #endregion

        #region GET METHODS
        public static string getKategorie()
        {
            string temp = string.Empty;
            foreach (Kategorie k in seznamKategorii)
            {
                temp += k.Id + ">" + k.JmenoKategorie + ">" + k.PoradiKategorie + ";";
            }
            return temp;
        }

        public static List<Kategorie> getKategorie(bool b)
        {
            return seznamKategorii;
        }

        public static List<string> getKategorie(bool b, bool c)
        {
            List<string> temp = new List<string>();
            foreach (Kategorie k in seznamKategorii)
            {
                temp.Add(k.JmenoKategorie);
            }
            return temp;
        }

        public static string getIDkategorie(string p)
        {
            foreach (Kategorie k in seznamKategorii)
            {
                if (k.JmenoKategorie.Equals(p))
                {
                    return k.Id;
                }
            }
            return "";
        }

        public static string getJmenoKategorie(string id)
        {
            foreach (Kategorie k in seznamKategorii)
            {
                if (k.Id.Equals(id))
                {
                    return k.JmenoKategorie;
                }
            }
            return "";
        }
        #endregion

        #region RESET METHOD
        public static void resetKategorii()
        {
            seznamKategorii.Clear();
        }
        #endregion
    }
}
